<?php
if (!defined('IN_PLUGIN')) exit();

require_once(PAY_ROOT . "inc/AlipayTradeService.php");

$logfile_name = date('Ymd') . '-notify' . '.log';
// mylog($logfile_name, json_encode($_POST));

//计算得出通知验证结果
$alipaySevice  = new AlipayTradeService($config);
$verify_result = $alipaySevice->check($_POST);

if ($verify_result) { //验证成功
	//商户订单号
	$out_trade_no = daddslashes($_POST['out_trade_no']);

	//支付宝交易号
	$trade_no = daddslashes($_POST['trade_no']);

	//交易状态
	$trade_status = $_POST['trade_status'];

	//买家支付宝
	$buyer_id = daddslashes($_POST['buyer_id']);

	//交易金额
	$total_amount = $_POST['total_amount'];

	if ($_POST['trade_status'] == 'TRADE_FINISHED') {
		//退款日期超过可退款期限后（如三个月可退款），支付宝系统发送该交易状态通知
		// donothing...
	} else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
		// trade_no 是唯一的, 由 mysql 保证.
		// 这里的 out_trade_no 就是 self 生成的 trade_no, `out` 是相对于支付宝来说的.
		$order = $DB->getRow("SELECT * FROM pre_order WHERE `trade_no` = '{$_POST['out_trade_no']}' ");
		if (!$order) {
			// 没有这个订单...
			echo 'fail-noorder';
			mylog($logfile_name, 'fail-noorder');
			exit;
		}

		// 验证订单
		if (
			$out_trade_no == TRADE_NO
			&& round($total_amount, 2) == round($order['realmoney'], 2)
			&& $order['status'] == 0										// status 标识这个订单是否被异步处理过...
			&& $_POST['app_id'] == $channel['appid']
			// && $_POST['seller_id']
		) {
			// order 表中的 status 表示是否从支付宝的异步通知返回了, 
			// order 表中的 notify 表示是否成功调用了发起支付方的回调, 0 是默认值; 成功为 0, 失败为 1.
			if ($DB->exec("update `pre_order` set `status` ='1' where `trade_no`='" . TRADE_NO . "'")) { // 设置已经异步通知了
				// 完善订单信息
				$DB->exec("update `pre_order` set `api_trade_no` ='$trade_no',`endtime` ='$date',`buyer` ='$buyer_id',`date` =NOW() where `trade_no`='" . TRADE_NO . "'");
				processOrder($order);		// order 表中的 notify, 默认是 0; 如果触发了回调, 正常是 0 , 不正常是 1
			}
		} else {
			mylog($logfile_name, '参数不匹配, (error of params)');
			echo 'failed';
			exit;
		}
	}

	echo "success";
} else {
	//验证失败
	echo "fail-yanqian";
	mylog($logfile_name, 'fail-yanqian');
}
?>